In this part, we are going to work on segmentating street-level images into different categories.
Inport the modules and mount Google Drive
Click to show code
# import fiona
# import shapely
# import pyproj
# import os, os.path
# from fiona.crs import from_epsg
# Load the Drive helper and mount
from google.colab import drive
# This will prompt for authorization.
drive.mount('/content/drive' )
Mounted at /content/drive
Click to show code
import time
import numpy as np
import requests
from PIL import Image
from matplotlib import pyplot as plt
import io
import os, os.path
Semantic Segmentation
This is a notebook for running the benchmark semantic segmentation network from the the ADE20K MIT Scene Parsing Benchchmark .
The code for this notebook is available here https://github.com/CSAILVision/semantic-segmentation-pytorch/tree/master/notebooks
It can be run on Colab at this URL https://colab.research.google.com/github/CSAILVision/semantic-segmentation-pytorch/blob/master/notebooks/DemoSegmenter.ipynb
Environment Setup
First, download the code and pretrained models if we are on colab.
Click to show code
%% bash
# Colab-specific setup
! (stat - t / usr/ local/ lib/*/ dist- packages/ google/ colab > / dev/ null 2 >& 1 ) && exit
pip install yacs 2 >& 1 >> install.log
git init 2 >& 1 >> install.log
git remote add origin https:// github.com/ CSAILVision/ semantic- segmentation- pytorch.git 2 >> install.log
git pull origin master 2 >& 1 >> install.log
DOWNLOAD_ONLY= 1 ./ demo_test.sh 2 >> install.log
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
From https://github.com/CSAILVision/semantic-segmentation-pytorch
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
Imports and utility functions
We need pytorch, numpy, and the code for the segmentation model. And some utilities for visualizing the data.
Click to show code
# System libs
import os, csv, torch, numpy, scipy.io, PIL.Image, torchvision.transforms
# Our libs
from mit_semseg.models import ModelBuilder, SegmentationModule
from mit_semseg.utils import colorEncode
colors = scipy.io.loadmat('data/color150.mat' )['colors' ]
names = {}
with open ('data/object150_info.csv' ) as f:
reader = csv.reader(f)
next (reader)
for row in reader:
names[int (row[0 ])] = row[5 ].split(";" )[0 ]
def visualize_result(img, pred, index= None ):
# filter prediction class if requested
if index is not None :
pred = pred.copy()
pred[pred != index] = - 1
print (f' { names[index+ 1 ]} :' )
# colorize prediction
pred_color = colorEncode(pred, colors).astype(numpy.uint8)
# aggregate images and save
im_vis = numpy.concatenate((img, pred_color), axis= 1 )
display(PIL.Image.fromarray(im_vis))
Loading the segmentation model
Here we load a pretrained segmentation model. Like any pytorch model, we can call it like a function, or examine the parameters in all the layers.
After loading, we put it on the GPU. And since we are doing inference, not training, we put the model in eval mode.
Click to show code
# Network Builders
net_encoder = ModelBuilder.build_encoder(
arch= 'resnet50dilated' ,
fc_dim= 2048 ,
weights= 'ckpt/ade20k-resnet50dilated-ppm_deepsup/encoder_epoch_20.pth' )
net_decoder = ModelBuilder.build_decoder(
arch= 'ppm_deepsup' ,
fc_dim= 2048 ,
num_class= 150 ,
weights= 'ckpt/ade20k-resnet50dilated-ppm_deepsup/decoder_epoch_20.pth' ,
use_softmax= True )
crit = torch.nn.NLLLoss(ignore_index=- 1 )
segmentation_module = SegmentationModule(net_encoder, net_decoder, crit)
segmentation_module.eval ()
segmentation_module.cuda()
Click to show code
# Load and normalize one image as a singleton tensor batch
pil_to_tensor = torchvision.transforms.Compose([
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(
mean= [0.485 , 0.456 , 0.406 ], # These are RGB mean+std values
std= [0.229 , 0.224 , 0.225 ]) # across a large photo dataset.
])
# pil_image = PIL.Image.open('ADE_val_00001519.jpg').convert('RGB')
# img_original = numpy.array(pil_image)
# img_data = pil_to_tensor(pil_image)
# singleton_batch = {'img_data': img_data[None].cuda()}
# output_size = img_data.shape[1:]
Load test data
Now we load and normalize a single test image. Here we use the commonplace convention of normalizing the image to a scale for which the RGB values of a large photo dataset would have zero mean and unit standard deviation. (These numbers come from the imagenet dataset.) With this normalization, the limiiting ranges of RGB values are within about (-2.2 to +2.7).
Building: 1
Sky: 2
road: 6
Tree: 4
Grass: 9
sidewalk: 11
Click to show code
! wget https:// utilitiesfiles.s3.us- east- 1. amazonaws .com/ penn- class / ai- urban- sustainability/ data/ gsvimages.zip - O gsvimgs.zip
! unzip - q gsvimgs.zip - d 'gsvimgs/'
! rm gsvimgs.zip
--2025-12-07 20:36:13-- https://utilitiesfiles.s3.us-east-1.amazonaws.com/penn-class/ai-urban-sustainability/data/gsvimages.zip
Resolving utilitiesfiles.s3.us-east-1.amazonaws.com (utilitiesfiles.s3.us-east-1.amazonaws.com)... 52.216.9.222, 54.231.128.130, 16.15.187.211, ...
Connecting to utilitiesfiles.s3.us-east-1.amazonaws.com (utilitiesfiles.s3.us-east-1.amazonaws.com)|52.216.9.222|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21495086 (20M) [application/zip]
Saving to: ‘gsvimgs.zip’
gsvimgs.zip 100%[===================>] 20.50M 7.24MB/s in 2.8s
2025-12-07 20:36:17 (7.24 MB/s) - ‘gsvimgs.zip’ saved [21495086/21495086]
Click to show code
from pathlib import Path
import pandas as pd
import os
# Root folder in your Google Drive
base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m' )
# CSV that has image_file and image_path columns
csv_path = base_dir / "street_points_250m_with_images.csv"
meta = pd.read_csv(csv_path)
print ("Loaded metadata rows:" , len (meta))
print (meta.columns)
# Build absolute image path from the relative image_path in CSV
meta["abs_image_path" ] = meta["image_path" ].apply (lambda p: str (base_dir / p))
# Quick check: show first few paths
meta[["image_file" , "image_path" , "abs_image_path" ]].head()
Loaded metadata rows: 178
Index(['city', 'street', 'segment_id', 'point_id', 'distance_m', 'lon', 'lat',
'heading_road', 'heading_sidewalk_right', 'heading_sidewalk_left',
'image_file', 'image_path', 'gsv_status', 'gsv_url_sidewalk'],
dtype='object')
0
idx0000_seg0_pt0_h189.jpg
gsv_sidewalk_250m\idx0000_seg0_pt0_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/s...
1
idx0001_seg0_pt1_h189.jpg
gsv_sidewalk_250m\idx0001_seg0_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/s...
2
idx0002_seg0_pt2_h189.jpg
gsv_sidewalk_250m\idx0002_seg0_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/s...
3
idx0003_seg0_pt3_h189.jpg
gsv_sidewalk_250m\idx0003_seg0_pt3_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/s...
4
idx0004_seg0_pt4_h189.jpg
gsv_sidewalk_250m\idx0004_seg0_pt4_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/s...
Click to show code
# gsvdir = os.path.join(root, 'gsvimgs')
# gsvdir
from pathlib import Path
base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m' )
gsvdir = base_dir / "gsv_sidewalk_250m"
files = os.listdir(gsvdir)
# Print total number of images
print ("Number of image files:" , len (files))
# Optional: print first few filenames to check
for f in files[:5 ]:
print (f)
Number of image files: 178
idx0000_seg0_pt0_h189.jpg
idx0001_seg0_pt1_h189.jpg
idx0002_seg0_pt2_h189.jpg
idx0003_seg0_pt3_h189.jpg
idx0004_seg0_pt4_h189.jpg
Click to show code
from google.colab import drive
drive.mount('/content/drive' )
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
Click to show code
import os
from pathlib import Path
base_dir = Path('/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m' )
img_dir = base_dir / "gsv_sidewalk_250m"
# 从 image_path 里提取出纯文件名(兼容 Windows 的反斜杠)
meta["image_file" ] = meta["image_path" ].apply (
lambda p: os.path.basename(str (p).replace(" \\ " , "/" ))
)
# 用真正的图片文件夹 + 文件名 拼出绝对路径
meta["abs_image_path" ] = meta["image_file" ].apply (
lambda f: str (img_dir / f)
)
print (meta[["image_path" , "image_file" , "abs_image_path" ]].head())
image_path image_file \
0 gsv_sidewalk_250m\idx0000_seg0_pt0_h189.jpg idx0000_seg0_pt0_h189.jpg
1 gsv_sidewalk_250m\idx0001_seg0_pt1_h189.jpg idx0001_seg0_pt1_h189.jpg
2 gsv_sidewalk_250m\idx0002_seg0_pt2_h189.jpg idx0002_seg0_pt2_h189.jpg
3 gsv_sidewalk_250m\idx0003_seg0_pt3_h189.jpg idx0003_seg0_pt3_h189.jpg
4 gsv_sidewalk_250m\idx0004_seg0_pt4_h189.jpg idx0004_seg0_pt4_h189.jpg
abs_image_path
0 /content/drive/MyDrive/Colab_Notebooks/final/s...
1 /content/drive/MyDrive/Colab_Notebooks/final/s...
2 /content/drive/MyDrive/Colab_Notebooks/final/s...
3 /content/drive/MyDrive/Colab_Notebooks/final/s...
4 /content/drive/MyDrive/Colab_Notebooks/final/s...
Applying segmentation model to street-view images to obtain class masks and output
Click to show code
import os
import numpy as np
import PIL.Image
# 1. Initialize empty columns for segmentation fractions
meta["building_frac" ] = np.nan
meta["sky_frac" ] = np.nan
meta["road_frac" ] = np.nan
meta["tree_frac" ] = np.nan
meta["grass_frac" ] = np.nan
meta["sidewalk_frac" ] = np.nan
# 2. Columns to store processed (segmentation visualization) image info
meta["seg_vis_file" ] = ""
meta["seg_vis_path" ] = ""
# 3. Folder to save processed images (original + segmentation)
seg_vis_dir = base_dir / "gsv_sidewalk_250m_segvis"
seg_vis_dir.mkdir(exist_ok= True )
# 4. Loop over each row in the CSV
for idx, row in meta.iterrows():
filename = row["abs_image_path" ]
print (filename)
# Optional: test only a few images first
# if idx > 5:
# break
# --- load image ---
pil_image = PIL.Image.open (filename).convert('RGB' )
img_original = np.array(pil_image)
img_data = pil_to_tensor(pil_image)
singleton_batch = {'img_data' : img_data[None ].cuda()}
output_size = img_data.shape[1 :]
# --- run segmentation ---
with torch.no_grad():
scores = segmentation_module(singleton_batch, segSize= output_size)
# predicted label per pixel (H, W), each in [0, 149]
_, pred = torch.max (scores, dim= 1 )
pred = pred.cpu()[0 ].numpy()
# ---- compute pixel fractions for selected classes ----
flat = pred.flatten()
total_pixels = flat.size
class_counts = np.bincount(flat, minlength= 150 )
class_frac = class_counts / total_pixels
# ADE20K class indices:
# 1: building, 2: sky, 3: road, 4: tree, 9: grass, 11: sidewalk
meta.loc[idx, "building_frac" ] = float (class_frac[1 ])
meta.loc[idx, "sky_frac" ] = float (class_frac[2 ])
meta.loc[idx, "road_frac" ] = float (class_frac[6 ])
meta.loc[idx, "tree_frac" ] = float (class_frac[4 ])
meta.loc[idx, "grass_frac" ] = float (class_frac[9 ])
meta.loc[idx, "sidewalk_frac" ] = float (class_frac[11 ])
# ---- create and save visualization image (original + segmentation) ----
# colorEncode and colors come from the MIT ADE20K code you ran earlier
pred_color = colorEncode(pred, colors).astype(np.uint8)
im_vis = np.concatenate((img_original, pred_color), axis= 1 )
# use image_file as base name if available
if "image_file" in meta.columns and isinstance (row["image_file" ], str ):
vis_name = f"seg_ { row['image_file' ]} "
else :
vis_name = f"seg_idx { idx:04d} .jpg"
vis_path = seg_vis_dir / vis_name
PIL.Image.fromarray(im_vis).save(vis_path)
# store processed image info (relative path is enough)
meta.loc[idx, "seg_vis_file" ] = vis_name
meta.loc[idx, "seg_vis_path" ] = str (vis_path)
# ---- (optional) visualize in notebook for the first few images ----
if idx < 3 :
visualize_result(img_original, pred)
print ("Segmentation + saving finished for all rows." )
# 5. Save updated CSV with fractions and processed image paths
out_csv = base_dir / "street_points_250m_with_seg_features.csv"
meta.to_csv(out_csv, index= False )
print ("Saved updated CSV to:" )
print (" " , out_csv)
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0000_seg0_pt0_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0001_seg0_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0002_seg0_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0003_seg0_pt3_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0004_seg0_pt4_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0005_seg0_pt5_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0006_seg0_pt6_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0007_seg0_pt7_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0008_seg0_pt8_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0009_seg0_pt9_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0010_seg0_pt10_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0011_seg0_pt11_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0012_seg0_pt12_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0013_seg0_pt13_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0014_seg0_pt14_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0015_seg0_pt15_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0016_seg1_pt0_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0017_seg1_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0018_seg1_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0019_seg1_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0020_seg1_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0021_seg1_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0022_seg1_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0023_seg1_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0024_seg1_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0025_seg1_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0026_seg1_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0027_seg1_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0028_seg1_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0029_seg1_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0030_seg1_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0031_seg1_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0032_seg2_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0033_seg2_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0034_seg2_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0035_seg2_pt3_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0036_seg2_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0037_seg2_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0038_seg2_pt6_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0039_seg2_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0040_seg2_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0041_seg2_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0042_seg2_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0043_seg2_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0044_seg2_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0045_seg2_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0046_seg2_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0047_seg2_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0048_seg2_pt16_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0049_seg2_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0050_seg2_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0051_seg2_pt19_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0052_seg2_pt20_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0053_seg2_pt21_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0054_seg3_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0055_seg4_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0056_seg5_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0057_seg5_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0058_seg5_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0059_seg5_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0060_seg5_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0061_seg5_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0062_seg6_pt0_h88.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0063_seg6_pt1_h8.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0064_seg6_pt2_h4.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0065_seg6_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0066_seg6_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0067_seg7_pt0_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0068_seg7_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0069_seg7_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0070_seg7_pt3_h268.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0071_seg7_pt4_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0072_seg7_pt5_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0073_seg7_pt6_h279.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0074_seg7_pt7_h277.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0075_seg7_pt8_h276.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0076_seg7_pt9_h276.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0077_seg8_pt0_h186.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0078_seg8_pt1_h105.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0079_seg8_pt2_h105.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0080_seg0_pt0_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0081_seg0_pt1_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0082_seg0_pt2_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0083_seg0_pt3_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0084_seg0_pt4_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0085_seg0_pt5_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0086_seg0_pt6_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0087_seg0_pt7_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0088_seg0_pt8_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0089_seg0_pt9_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0090_seg0_pt10_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0091_seg0_pt11_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0092_seg0_pt12_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0093_seg0_pt13_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0094_seg0_pt14_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0095_seg0_pt15_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0096_seg0_pt16_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0097_seg0_pt17_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0098_seg0_pt18_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0099_seg0_pt19_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0100_seg0_pt20_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0101_seg0_pt21_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0102_seg0_pt22_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0103_seg0_pt23_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0104_seg0_pt24_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0105_seg0_pt25_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0106_seg0_pt26_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0107_seg0_pt27_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0108_seg0_pt28_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0109_seg0_pt29_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0110_seg0_pt30_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0111_seg0_pt31_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0112_seg0_pt32_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0113_seg0_pt33_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0114_seg0_pt34_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0115_seg0_pt35_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0116_seg0_pt36_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0117_seg0_pt37_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0118_seg0_pt38_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0119_seg0_pt39_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0120_seg0_pt40_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0121_seg0_pt41_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0122_seg0_pt42_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0123_seg0_pt43_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0124_seg0_pt44_h189.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0125_seg0_pt45_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0126_seg0_pt46_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0127_seg0_pt47_h190.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0128_seg0_pt0_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0129_seg0_pt1_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0130_seg0_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0131_seg0_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0132_seg0_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0133_seg0_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0134_seg0_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0135_seg0_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0136_seg0_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0137_seg0_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0138_seg0_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0139_seg0_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0140_seg0_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0141_seg0_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0142_seg0_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0143_seg0_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0144_seg0_pt16_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0145_seg0_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0146_seg0_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0147_seg0_pt19_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0148_seg0_pt20_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0149_seg0_pt21_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0150_seg0_pt22_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0151_seg0_pt23_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0152_seg0_pt24_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0153_seg0_pt25_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0154_seg0_pt26_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0155_seg0_pt27_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0156_seg1_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0157_seg2_pt0_h90.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0158_seg3_pt0_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0159_seg3_pt1_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0160_seg3_pt2_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0161_seg3_pt3_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0162_seg3_pt4_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0163_seg3_pt5_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0164_seg3_pt6_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0165_seg3_pt7_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0166_seg3_pt8_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0167_seg3_pt9_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0168_seg3_pt10_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0169_seg3_pt11_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0170_seg3_pt12_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0171_seg3_pt13_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0172_seg3_pt14_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0173_seg3_pt15_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0174_seg3_pt16_h10.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0175_seg3_pt17_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0176_seg3_pt18_h9.jpg
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/gsv_sidewalk_250m/idx0177_seg3_pt19_h9.jpg
Segmentation + saving finished for all rows.
Saved updated CSV to:
/content/drive/MyDrive/Colab_Notebooks/final/street_samples_250m/street_points_250m_with_seg_features.csv